/**
 * 错误处理中间件
 * 统一处理应用中发生的错误
 */
const logger = require('../utils/logger');

/**
 * 全局错误处理中间件
 * @param {Error} err - 错误对象
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 */
const errorHandler = (err, req, res, next) => {
  // 记录错误详情
  logger.error(`${err.name}: ${err.message}`);
  logger.error(err.stack);

  // 设置默认状态码和错误消息
  const statusCode = err.statusCode || 500;
  const message = err.message || '服务器内部错误';

  // 根据环境返回不同级别的错误详情
  const response = {
    error: true,
    message: message,
  };

  // 在开发环境中返回更多错误详情
  if (process.env.NODE_ENV === 'development') {
    response.stack = err.stack;
    response.details = err.details || {};
  }

  res.status(statusCode).json(response);
};

/**
 * 自定义API错误类
 */
class ApiError extends Error {
  /**
   * 创建API错误
   * @param {string} message - 错误消息
   * @param {number} statusCode - HTTP状态码
   * @param {Object} details - 错误详情
   */
  constructor(message, statusCode = 500, details = {}) {
    super(message);
    this.name = this.constructor.name;
    this.statusCode = statusCode;
    this.details = details;
    Error.captureStackTrace(this, this.constructor);
  }
}

module.exports = {
  errorHandler,
  ApiError
}; 